import soundfile as sf
import requests
import json
import wave
from pptx import Presentation
import time,sys
import os,uuid,math

#获取语音文件长度
def wav_length(path):
    f = sf.SoundFile(path)
    return math.ceil(len(f) / f.samplerate)

#将文本转成字符数组，通过回车分割符
# Windows中：回车符为 ‘\r’，回到行首；换行符为 ‘\n’，换到当前位置的下一行；
# Unix系统中：觉得每行结尾加两个字符没有必要，故结尾只有换行符，即‘\n’;
# Mac系统中：每行结尾只有回车符，即‘\r’。

def text_to_arr_br(text):
    text = text.replace("\r\n","\n")
    text = text.replace("\r","\n")
    return text.split("\n")

#将一个太长的字符，按标点符号分成多段，防止字幕太长，屏幕上放不下
def long_string_split(str,max_length):
    res = []
    if str_width(str) > max_length:
        strs_arr = str.split("。")
        for temp_str in strs_arr:
            if str_width(temp_str) > max_length:
                strs_arr_1 = temp_str.split("；")
                for temp_str_1 in strs_arr_1:
                    if str_width(temp_str_1) > max_length:
                        strs_arr_2 = temp_str_1.split("，")
                        for temp_str_2 in strs_arr_2:
                            if len(temp_str_2) > 0:
                                res.append(temp_str_2)
                    elif len(temp_str_1) > 0:
                        res.append(temp_str_1)
            elif len(temp_str) > 0:
                res.append(temp_str)
    elif len(str) > 0:
        res.append(str)

    return res

def str_width(str):
    lenTxt = len(str)
    lenTxt_utf8 = len(str.encode('utf-8'))

    return int((lenTxt_utf8 - lenTxt) / 2 + lenTxt)

def random_key():
    dir = time.strftime("%Y%m", time.localtime(time.time()))
    return oss_path_join(dir,str(uuid.uuid1())+".pptx")

def key_to_dir(key):
    return key[:-5]

#oss 路径只能使用/ 不能使用\ ，os.path.join在 windows 下是 \ 会出错
def oss_path_join(*args):
    # print(args)
    res = ''
    for i in args:
        res += i + "/"
    return res[:-1]

#获取路径中的文件名，不含扩展名
def filepath_base_name(path):
    return key_to_dir(os.path.basename(path))

#读pptx，获取到一个字典,{0:'备注',1:'备注'}
def read_pptx(pptpath):
    prs = Presentation(pptpath)

    res = {}

    index = 0
    for i in prs.slides:
        res[index] = i.notes_slide.notes_text_frame.text
        index +=1
    return res

def format_second(sec):
    hour = int(sec / 3600)
    min = int((sec%3600) / 60)
    second = sec%60
    return "%02d:%02d:%02d,000" % (hour,min,second)

def resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)